package com.example.chatrecommendation.controller;


import com.example.chatrecommendation.bean.dto.RadarUpdateDTO;
import com.example.chatrecommendation.bean.vo.RadarVO;
import com.example.chatrecommendation.service.impl.RadarServiceImpl;
import com.example.chatrecommendation.tool.JwtUtil;
import com.example.chatrecommendation.tool.R;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/student/radar")
@Api("雷达图模块")
public class RadarController {
	private final RadarServiceImpl radarServiceImpl;
	private final JwtUtil jwtUtil;

	public RadarController(RadarServiceImpl radarServiceImpl, JwtUtil jwtUtil) {
		this.radarServiceImpl = radarServiceImpl;
		this.jwtUtil = jwtUtil;
	}

	/**
	 * 获取雷达图
	 * 通过学生账号获取雷达图
	 *
	 * @param userId 学生账号
	 * @return 雷达图数据
	 */
	@GetMapping("/getRadar")
	@ApiModelProperty("获取雷达图")
	public R<RadarVO> getRadar(@RequestParam Integer userId) {
		return R.success(radarServiceImpl.getRadar(userId));
	}

	/**
	 * 在每一个需要做权限校验的接口上加上@RequestHeader("Authorization") String authHeader就能获取到前端发过来的token
	 * <p>但是前端发请求的时候必须要在http请求头部，传上Authorization字段</p>
	 *
	 * @param radarUpdateDTO 雷达图更新数据
	 * @param authHeader     jwt字符串
	 * @return 是否成功
	 */
	@PutMapping("/update")
	public R<String> update(@RequestBody RadarUpdateDTO radarUpdateDTO, @RequestHeader("Authorization") String authHeader) {
		System.out.println("authHeader = " + authHeader);
//		拿到jwt之后直接做校验，失败则返回错误信息权限不足，成功则继续
		Claims claims = jwtUtil.parseJWT(authHeader);
		if (claims == null) {
			return R.err("权限不足");
		}
		Integer studentId = claims.get("studentId", Integer.class);
		radarServiceImpl.update(radarUpdateDTO, studentId);
		return R.success("更新成功");
	}
}
